package com.baizhiedu.aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

/**
 * 功能：
 * 作者：HZj
 * 日期：2024/12/27 0:07
 */
/**
 * 1.额外功能
 *      public class MyArround implements MethodInterceptor{
 *          public Object invoke(MethodInvocation invocation){
 *              Object ret = invocation.proceed();
 *              return ret;
 *          }
 *      }
 * 2，切入点
 *
 * 通过切面类 定义了 额外功能 @Around
 *          定义了 切入点   @Around("execution(* login(..))")
 *          @Aspect 切面类
 * */
@Aspect
public class MyAspect {
    //切入点复用：在切面类中定义一个函数 上面@Pointcut注解 通过这种方式，定义切入点表达式，后续更加有利于切入点复用
//    @Pointcut("execution(* login(..))")
    @Pointcut("execution(* *..UserServiceImpl.*(..))")
    public void myPointcut(){}

    @Around(value = "myPointcut()")
    public Object arround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("---aspect log---");
        Object ret = joinPoint.proceed();
        return ret;
    }

    @Around("myPointcut()")
    public Object arround1(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("---tx log---");
        Object ret = joinPoint.proceed();
        return ret;
    }




}
